package br.ucb.musicbay.artista;

import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import br.ucb.musicbay.usuario.Usuario;

public class ArtistaDao implements ArtistaInterfaceDao {
	
	private transient Session session;
		
	public void setSession(Session session) {
		this.session = session;
	}

	@Override
	public boolean save(Artista artista) {
		try {
			this.session.save(artista);
			return true;
		} catch (Exception e) {
			throw new HibernateException("ERRO! ERRO - save(Artista artista) "+new Date());
		}		
	}

	@Override
	public boolean delete(Artista[] artista){
		try{
			for (Artista artista2 : artista) {
				session.delete(artista2);
			}
			return true;
		}catch (Exception e) {
			throw new HibernateException("ERRO! ERRO - delete(Artista[] artista) "+new Date());
		}		
	}

	@Override
	public boolean update(Artista artista) {
		try {
			this.session.merge(artista);
			return true;
		} catch (Exception e) {	
			e.printStackTrace();		
		}	
		return false;
	}

	@Override
	public Usuario select(Artista artista) {
		// TODO Auto-generated method stub
		return null;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Artista> recoverAll() {
		Criteria criteria = this.session.createCriteria(Artista.class).addOrder(Order.asc("nome")).addOrder(Order.desc("status"));
		return criteria.list();
	}

	@Override
	public Artista recoverById(Integer id) {
		return (Artista)session.get(Artista.class, id);
	}

	@Override
	public Artista recoverByObject(Artista artista) {
		Criteria criteria = this.session.createCriteria(Artista.class);
		criteria.equals(artista);
		return (Artista) criteria.uniqueResult();
	}

	@Override
	public Artista verificaItem(String artista) {
		Criteria crit = session.createCriteria(Artista.class);
		crit.add(Restrictions.eq("nome", artista));
		Artista artistaR = (Artista) crit.uniqueResult();
		return artistaR;		
	}

}
